"use strict";
/*!-----------------------------------------------------------------------------
 * Copyright (c) Microsoft Corporation. All rights reserved.
 * Version: 0.34.1(547870b6881302c5b4ff32173c16d06009e3588f)
 * Released under the MIT license
 * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
 *-----------------------------------------------------------------------------*/
define("vs/basic-languages/perl/perl", ["require"], require => {
	var moduleExports = (() => {
		var __defProp = Object.defineProperty;
		var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
		var __getOwnPropNames = Object.getOwnPropertyNames;
		var __hasOwnProp = Object.prototype.hasOwnProperty;
		var __export = (target, all) => {
			for (var name in all)
				__defProp(target, name, { get: all[name], enumerable: true });
		};
		var __copyProps = (to, from, except, desc) => {
			if ((from && typeof from === "object") || typeof from === "function") {
				for (let key of __getOwnPropNames(from))
					if (!__hasOwnProp.call(to, key) && key !== except)
						__defProp(to, key, {
							get: () => from[key],
							enumerable:
								!(desc = __getOwnPropDesc(from, key)) || desc.enumerable
						});
			}
			return to;
		};
		var __toCommonJS = mod =>
			__copyProps(__defProp({}, "__esModule", { value: true }), mod);

		// src/basic-languages/perl/perl.ts
		var perl_exports = {};
		__export(perl_exports, {
			conf: () => conf,
			language: () => language
		});
		var conf = {
			comments: {
				lineComment: "#"
			},
			brackets: [
				["{", "}"],
				["[", "]"],
				["(", ")"]
			],
			autoClosingPairs: [
				{ open: "{", close: "}" },
				{ open: "[", close: "]" },
				{ open: "(", close: ")" },
				{ open: '"', close: '"' },
				{ open: "'", close: "'" },
				{ open: "`", close: "`" }
			],
			surroundingPairs: [
				{ open: "{", close: "}" },
				{ open: "[", close: "]" },
				{ open: "(", close: ")" },
				{ open: '"', close: '"' },
				{ open: "'", close: "'" },
				{ open: "`", close: "`" }
			]
		};
		var language = {
			defaultToken: "",
			tokenPostfix: ".perl",
			brackets: [
				{ token: "delimiter.bracket", open: "{", close: "}" },
				{ token: "delimiter.parenthesis", open: "(", close: ")" },
				{ token: "delimiter.square", open: "[", close: "]" }
			],
			keywords: [
				"__DATA__",
				"else",
				"lock",
				"__END__",
				"elsif",
				"lt",
				"__FILE__",
				"eq",
				"__LINE__",
				"exp",
				"ne",
				"sub",
				"__PACKAGE__",
				"for",
				"no",
				"and",
				"foreach",
				"or",
				"unless",
				"cmp",
				"ge",
				"package",
				"until",
				"continue",
				"gt",
				"while",
				"CORE",
				"if",
				"xor",
				"do",
				"le",
				"__DIE__",
				"__WARN__"
			],
			builtinFunctions: [
				"-A",
				"END",
				"length",
				"setpgrp",
				"-B",
				"endgrent",
				"link",
				"setpriority",
				"-b",
				"endhostent",
				"listen",
				"setprotoent",
				"-C",
				"endnetent",
				"local",
				"setpwent",
				"-c",
				"endprotoent",
				"localtime",
				"setservent",
				"-d",
				"endpwent",
				"log",
				"setsockopt",
				"-e",
				"endservent",
				"lstat",
				"shift",
				"-f",
				"eof",
				"map",
				"shmctl",
				"-g",
				"eval",
				"mkdir",
				"shmget",
				"-k",
				"exec",
				"msgctl",
				"shmread",
				"-l",
				"exists",
				"msgget",
				"shmwrite",
				"-M",
				"exit",
				"msgrcv",
				"shutdown",
				"-O",
				"fcntl",
				"msgsnd",
				"sin",
				"-o",
				"fileno",
				"my",
				"sleep",
				"-p",
				"flock",
				"next",
				"socket",
				"-r",
				"fork",
				"not",
				"socketpair",
				"-R",
				"format",
				"oct",
				"sort",
				"-S",
				"formline",
				"open",
				"splice",
				"-s",
				"getc",
				"opendir",
				"split",
				"-T",
				"getgrent",
				"ord",
				"sprintf",
				"-t",
				"getgrgid",
				"our",
				"sqrt",
				"-u",
				"getgrnam",
				"pack",
				"srand",
				"-w",
				"gethostbyaddr",
				"pipe",
				"stat",
				"-W",
				"gethostbyname",
				"pop",
				"state",
				"-X",
				"gethostent",
				"pos",
				"study",
				"-x",
				"getlogin",
				"print",
				"substr",
				"-z",
				"getnetbyaddr",
				"printf",
				"symlink",
				"abs",
				"getnetbyname",
				"prototype",
				"syscall",
				"accept",
				"getnetent",
				"push",
				"sysopen",
				"alarm",
				"getpeername",
				"quotemeta",
				"sysread",
				"atan2",
				"getpgrp",
				"rand",
				"sysseek",
				"AUTOLOAD",
				"getppid",
				"read",
				"system",
				"BEGIN",
				"getpriority",
				"readdir",
				"syswrite",
				"bind",
				"getprotobyname",
				"readline",
				"tell",
				"binmode",
				"getprotobynumber",
				"readlink",
				"telldir",
				"bless",
				"getprotoent",
				"readpipe",
				"tie",
				"break",
				"getpwent",
				"recv",
				"tied",
				"caller",
				"getpwnam",
				"redo",
				"time",
				"chdir",
				"getpwuid",
				"ref",
				"times",
				"CHECK",
				"getservbyname",
				"rename",
				"truncate",
				"chmod",
				"getservbyport",
				"require",
				"uc",
				"chomp",
				"getservent",
				"reset",
				"ucfirst",
				"chop",
				"getsockname",
				"return",
				"umask",
				"chown",
				"getsockopt",
				"reverse",
				"undef",
				"chr",
				"glob",
				"rewinddir",
				"UNITCHECK",
				"chroot",
				"gmtime",
				"rindex",
				"unlink",
				"close",
				"goto",
				"rmdir",
				"unpack",
				"closedir",
				"grep",
				"say",
				"unshift",
				"connect",
				"hex",
				"scalar",
				"untie",
				"cos",
				"index",
				"seek",
				"use",
				"crypt",
				"INIT",
				"seekdir",
				"utime",
				"dbmclose",
				"int",
				"select",
				"values",
				"dbmopen",
				"ioctl",
				"semctl",
				"vec",
				"defined",
				"join",
				"semget",
				"wait",
				"delete",
				"keys",
				"semop",
				"waitpid",
				"DESTROY",
				"kill",
				"send",
				"wantarray",
				"die",
				"last",
				"setgrent",
				"warn",
				"dump",
				"lc",
				"sethostent",
				"write",
				"each",
				"lcfirst",
				"setnetent"
			],
			builtinFileHandlers: [
				"ARGV",
				"STDERR",
				"STDOUT",
				"ARGVOUT",
				"STDIN",
				"ENV"
			],
			builtinVariables: [
				"$!",
				"$^RE_TRIE_MAXBUF",
				"$LAST_REGEXP_CODE_RESULT",
				'$"',
				"$^S",
				"$LIST_SEPARATOR",
				"$#",
				"$^T",
				"$MATCH",
				"$$",
				"$^TAINT",
				"$MULTILINE_MATCHING",
				"$%",
				"$^UNICODE",
				"$NR",
				"$&",
				"$^UTF8LOCALE",
				"$OFMT",
				"$'",
				"$^V",
				"$OFS",
				"$(",
				"$^W",
				"$ORS",
				"$)",
				"$^WARNING_BITS",
				"$OS_ERROR",
				"$*",
				"$^WIDE_SYSTEM_CALLS",
				"$OSNAME",
				"$+",
				"$^X",
				"$OUTPUT_AUTO_FLUSH",
				"$,",
				"$_",
				"$OUTPUT_FIELD_SEPARATOR",
				"$-",
				"$`",
				"$OUTPUT_RECORD_SEPARATOR",
				"$.",
				"$a",
				"$PERL_VERSION",
				"$/",
				"$ACCUMULATOR",
				"$PERLDB",
				"$0",
				"$ARG",
				"$PID",
				"$:",
				"$ARGV",
				"$POSTMATCH",
				"$;",
				"$b",
				"$PREMATCH",
				"$<",
				"$BASETIME",
				"$PROCESS_ID",
				"$=",
				"$CHILD_ERROR",
				"$PROGRAM_NAME",
				"$>",
				"$COMPILING",
				"$REAL_GROUP_ID",
				"$?",
				"$DEBUGGING",
				"$REAL_USER_ID",
				"$@",
				"$EFFECTIVE_GROUP_ID",
				"$RS",
				"$[",
				"$EFFECTIVE_USER_ID",
				"$SUBSCRIPT_SEPARATOR",
				"$\\",
				"$EGID",
				"$SUBSEP",
				"$]",
				"$ERRNO",
				"$SYSTEM_FD_MAX",
				"$^",
				"$EUID",
				"$UID",
				"$^A",
				"$EVAL_ERROR",
				"$WARNING",
				"$^C",
				"$EXCEPTIONS_BEING_CAUGHT",
				"$|",
				"$^CHILD_ERROR_NATIVE",
				"$EXECUTABLE_NAME",
				"$~",
				"$^D",
				"$EXTENDED_OS_ERROR",
				"%!",
				"$^E",
				"$FORMAT_FORMFEED",
				"%^H",
				"$^ENCODING",
				"$FORMAT_LINE_BREAK_CHARACTERS",
				"%ENV",
				"$^F",
				"$FORMAT_LINES_LEFT",
				"%INC",
				"$^H",
				"$FORMAT_LINES_PER_PAGE",
				"%OVERLOAD",
				"$^I",
				"$FORMAT_NAME",
				"%SIG",
				"$^L",
				"$FORMAT_PAGE_NUMBER",
				"@+",
				"$^M",
				"$FORMAT_TOP_NAME",
				"@-",
				"$^N",
				"$GID",
				"@_",
				"$^O",
				"$INPLACE_EDIT",
				"@ARGV",
				"$^OPEN",
				"$INPUT_LINE_NUMBER",
				"@INC",
				"$^P",
				"$INPUT_RECORD_SEPARATOR",
				"@LAST_MATCH_START",
				"$^R",
				"$LAST_MATCH_END",
				"$^RE_DEBUG_FLAGS",
				"$LAST_PAREN_MATCH"
			],
			symbols: /[:+\-\^*$&%@=<>!?|\/~\.]/,
			quoteLikeOps: ["qr", "m", "s", "q", "qq", "qx", "qw", "tr", "y"],
			escapes:
				/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,
			tokenizer: {
				root: [
					{ include: "@whitespace" },
					[
						/[a-zA-Z\-_][\w\-_]*/,
						{
							cases: {
								"@keywords": "keyword",
								"@builtinFunctions": "type.identifier",
								"@builtinFileHandlers": "variable.predefined",
								"@quoteLikeOps": {
									token: "@rematch",
									next: "quotedConstructs"
								},
								"@default": ""
							}
						}
					],
					[
						/[\$@%][*@#?\+\-\$!\w\\\^><~:;\.]+/,
						{
							cases: {
								"@builtinVariables": "variable.predefined",
								"@default": "variable"
							}
						}
					],
					{ include: "@strings" },
					{ include: "@dblStrings" },
					{ include: "@perldoc" },
					{ include: "@heredoc" },
					[/[{}\[\]()]/, "@brackets"],
					[
						/[\/](?:(?:\[(?:\\]|[^\]])+\])|(?:\\\/|[^\]\/]))*[\/]\w*\s*(?=[).,;]|$)/,
						"regexp"
					],
					[/@symbols/, "operators"],
					{ include: "@numbers" },
					[/[,;]/, "delimiter"]
				],
				whitespace: [
					[/\s+/, "white"],
					[/(^#!.*$)/, "metatag"],
					[/(^#.*$)/, "comment"]
				],
				numbers: [
					[/\d*\.\d+([eE][\-+]?\d+)?/, "number.float"],
					[/0[xX][0-9a-fA-F_]*[0-9a-fA-F]/, "number.hex"],
					[/\d+/, "number"]
				],
				strings: [[/'/, "string", "@stringBody"]],
				stringBody: [
					[/'/, "string", "@popall"],
					[/\\'/, "string.escape"],
					[/./, "string"]
				],
				dblStrings: [[/"/, "string", "@dblStringBody"]],
				dblStringBody: [
					[/"/, "string", "@popall"],
					[/@escapes/, "string.escape"],
					[/\\./, "string.escape.invalid"],
					{ include: "@variables" },
					[/./, "string"]
				],
				quotedConstructs: [
					[
						/(q|qw|tr|y)\s*\(/,
						{ token: "string.delim", switchTo: "@qstring.(.)" }
					],
					[
						/(q|qw|tr|y)\s*\[/,
						{ token: "string.delim", switchTo: "@qstring.[.]" }
					],
					[
						/(q|qw|tr|y)\s*\{/,
						{ token: "string.delim", switchTo: "@qstring.{.}" }
					],
					[
						/(q|qw|tr|y)\s*</,
						{ token: "string.delim", switchTo: "@qstring.<.>" }
					],
					[/(q|qw|tr|y)#/, { token: "string.delim", switchTo: "@qstring.#.#" }],
					[
						/(q|qw|tr|y)\s*([^A-Za-z0-9#\s])/,
						{ token: "string.delim", switchTo: "@qstring.$2.$2" }
					],
					[
						/(q|qw|tr|y)\s+(\w)/,
						{ token: "string.delim", switchTo: "@qstring.$2.$2" }
					],
					[
						/(qr|m|s)\s*\(/,
						{ token: "regexp.delim", switchTo: "@qregexp.(.)" }
					],
					[
						/(qr|m|s)\s*\[/,
						{ token: "regexp.delim", switchTo: "@qregexp.[.]" }
					],
					[
						/(qr|m|s)\s*\{/,
						{ token: "regexp.delim", switchTo: "@qregexp.{.}" }
					],
					[/(qr|m|s)\s*</, { token: "regexp.delim", switchTo: "@qregexp.<.>" }],
					[/(qr|m|s)#/, { token: "regexp.delim", switchTo: "@qregexp.#.#" }],
					[
						/(qr|m|s)\s*([^A-Za-z0-9_#\s])/,
						{ token: "regexp.delim", switchTo: "@qregexp.$2.$2" }
					],
					[
						/(qr|m|s)\s+(\w)/,
						{ token: "regexp.delim", switchTo: "@qregexp.$2.$2" }
					],
					[
						/(qq|qx)\s*\(/,
						{ token: "string.delim", switchTo: "@qqstring.(.)" }
					],
					[
						/(qq|qx)\s*\[/,
						{ token: "string.delim", switchTo: "@qqstring.[.]" }
					],
					[
						/(qq|qx)\s*\{/,
						{ token: "string.delim", switchTo: "@qqstring.{.}" }
					],
					[/(qq|qx)\s*</, { token: "string.delim", switchTo: "@qqstring.<.>" }],
					[/(qq|qx)#/, { token: "string.delim", switchTo: "@qqstring.#.#" }],
					[
						/(qq|qx)\s*([^A-Za-z0-9#\s])/,
						{ token: "string.delim", switchTo: "@qqstring.$2.$2" }
					],
					[
						/(qq|qx)\s+(\w)/,
						{ token: "string.delim", switchTo: "@qqstring.$2.$2" }
					]
				],
				qstring: [
					[/\\./, "string.escape"],
					[
						/./,
						{
							cases: {
								"$#==$S3": { token: "string.delim", next: "@pop" },
								"$#==$S2": { token: "string.delim", next: "@push" },
								"@default": "string"
							}
						}
					]
				],
				qregexp: [
					{ include: "@variables" },
					[/\\./, "regexp.escape"],
					[
						/./,
						{
							cases: {
								"$#==$S3": {
									token: "regexp.delim",
									next: "@regexpModifiers"
								},
								"$#==$S2": { token: "regexp.delim", next: "@push" },
								"@default": "regexp"
							}
						}
					]
				],
				regexpModifiers: [
					[/[msixpodualngcer]+/, { token: "regexp.modifier", next: "@popall" }]
				],
				qqstring: [{ include: "@variables" }, { include: "@qstring" }],
				heredoc: [
					[
						/<<\s*['"`]?([\w\-]+)['"`]?/,
						{ token: "string.heredoc.delimiter", next: "@heredocBody.$1" }
					]
				],
				heredocBody: [
					[
						/^([\w\-]+)$/,
						{
							cases: {
								"$1==$S2": [
									{
										token: "string.heredoc.delimiter",
										next: "@popall"
									}
								],
								"@default": "string.heredoc"
							}
						}
					],
					[/./, "string.heredoc"]
				],
				perldoc: [[/^=\w/, "comment.doc", "@perldocBody"]],
				perldocBody: [
					[/^=cut\b/, "type.identifier", "@popall"],
					[/./, "comment.doc"]
				],
				variables: [
					[/\$\w+/, "variable"],
					[/@\w+/, "variable"],
					[/%\w+/, "variable"]
				]
			}
		};
		return __toCommonJS(perl_exports);
	})();
	return moduleExports;
});
